from collections import namedtuple, deque, defaultdict, OrderedDict

# collections是Python内建的一个集合模块，提供了许多有用的集合类。
print('**********************namedtuple*************************************')
# namedtuple [给元组设置名称的]
# 我们知道tuple可以表示不变集合，例如，一个点的二维坐标就可以表示成：
Point = namedtuple('Point', ['x', 'y'])
p = Point('232', '67765')
print('x ' + p.x + " y " + p.y)
# 定义一个圆
Cirle = namedtuple('Cirle', ['x', 'y', 'r'])
# 总结：
# namedtuple是一个函数，它用来创建一个自定义的tuple对象，并且规定了tuple元素的个数，并可以用属性而不是索引来引用tuple的某个元素。
# 判断对象是否属于元组或者对象
print(isinstance(p, Point))
print(isinstance(p, tuple))
print('**********************deque*************************************')

# deque是为了高效实现插入和删除操作的双向列表、，适合用于队列和栈：
q = deque(['q', 'freg', '756'])
q.append('bgb')
q.appendleft('bgvfdbb')
print(q)
print('**********************defaultdict*************************************')

# 使用dict时，如果引用的Key不存在，就会抛出KeyError。如果希望key不存在时，返回一个默认值，就可以用defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
print(dd.get('key1'))
print(dd.get('key2'))
print(dd['key2'])
print('**********************OrderedDict*************************************')
# OrderedDict的Key会按照插入的顺序排列，不是Key本身排序：
od = OrderedDict([('name', 'liangkun'), ('age', '69'), ('city', 'wuhan')])
print(od)
